//
//  UserAccountViewModel.swift
//  sinaWB
//
//  Created by 杨运旺 on 15/11/11.
//  Copyright © 2015年 杨运旺. All rights reserved.
//

import Foundation

class UserAccountViewModel{
    /// 用户模型
    var userAccount:UserAccount?
    
     /// token字典
    var tokenDict:[String: AnyObject]?{
        return isExpired ? nil : ["access_token": userAccount!.access_token!]
    }
    
     /// 用户视图模型单例
    static let sharedUserAccount = UserAccountViewModel()
    
     /// 用户登录标记
    var userLogon:Bool{
        return userAccount?.access_token != nil && !isExpired
    }
    
     /// 用户头像URL
    var avatarUrl:NSURL{
        return NSURL(string: userAccount?.avatar_large ?? "")!
    }
    
    
    
    /// 归档保存路径
    private var accountPath:String{
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        return (path as NSString).stringByAppendingPathComponent("account.plist")
    }
    
    /// 判断是否过期
    private var isExpired:Bool{
        
        // 使用户账户过期
//        userAccount?.expiresDate = NSDate(timeIntervalSinceNow: -3600);
        
        if userAccount?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending && userAccount?.access_token != nil{
            return false
        }
        return true
    }
 
    // MARK - 构造函数
    private init (){
        //从沙盒加载用户信息
        userAccount = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? UserAccount
        // 如果帐号已经过期，清空帐号，要求用户重新登录
        if isExpired {
            print("已经过期")
            userAccount = nil
        }
//        print(userAccount)
    }
    
}


// MARK: - 网络业务逻辑方法
extension UserAccountViewModel{
    
    func loadAccessToken(code:String,fininsed:(isSuccessed:Bool)->()){
    // 4. 加载AccessToKen
    NetworkTools.sharedTools.loadAccessToKen(code) { (result, error) -> () in
    // 1> 判断错误
    if error != nil{
        fininsed(isSuccessed: false)
        return
    }
        
         // 2> 输出结果 － 在 Swift 中任何 AnyObject 在使用前，必须转换类型 -> as ?/! 类型
         // 2> 记录用户账户属性
        self.userAccount = UserAccount(dict: result as! [String: AnyObject])
    
         // 3> 加载账户信息
        self.loadUserInfo(self.userAccount!, fininsed: fininsed)
    }
}
    private func loadUserInfo(account:UserAccount,fininsed:(isSuccessed:Bool)->()){
        NetworkTools.sharedTools.loadUserInfo(account.uid!) { (result, error) -> () in
            if error != nil{
                fininsed(isSuccessed: false)
                return
            }
            
            // 提示：如果使用 if let / guard let 统统使用 `?`
            // 作了两个判断
            // 1. result 一定有内容
            // 2. 一定是字典
            guard let dict = result as? [String :AnyObject] else{
                fininsed(isSuccessed: false)
                return
            }
            
            // dict 一定是一个有值的字典
            // 将用户信息保存
            account.screen_name = dict["screen_name"]as? String
            account.avatar_large = dict["avatar_large"]as? String

            NSKeyedArchiver.archiveRootObject(account, toFile: self.accountPath)
            print(self.accountPath)
            
            fininsed(isSuccessed: true)
            
        }
    }

}